package top.kaoshanji.p1ch04a;

import org.apache.hc.core5.http.ContentType;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;

/**
 * 代码清单-p1ch04a-94页a：锁定到服务器的Servlet
 * URL访问地址：/keyedServerLock
 * @author kaoshanji
 * ^_^
 * create time 2025/4/3 17:37
 */
public class KeyedServerLock extends GenericServlet {

    // 本 Servlet 无类或实例变量
    // 和加锁关联，所以简化了同步问题

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        // 设置请求对象的编码
        req.setCharacterEncoding(StandardCharsets.UTF_8.name());

        // 设置响应对象的编码和内容格式
        res.setContentType(ContentType.TEXT_PLAIN.toString());
        PrintWriter out = res.getWriter();

        // 在初始中不应进行盗版检查，因为名称/端口是请求的一部分
        String key = getInitParameter("key");
        String host = req.getServerName();
        int port = req.getServerPort();

        // 如果初始变量 key 对服务器解锁，进行检查
        if (!keyFileServer(key, host, port)) {
            // 说明、谴责、预警等
            out.println("Pirated!");
        } else {
            // 把内容给他们
            out.println("Valid");
        }

    }

    // 这个方法包括同服务器主机和端口相匹配的算法
    // 这个演示配置功能很弱不适合用于商业网站
    private boolean keyFileServer(String key, String host, int port) {
        return false;
    }

}
